<?php

namespace App\Services;

use App\Models\Building;
use App\Models\Owner;
use App\Models\Room;

// （房产，楼栋，房间）的服务类
class EstateService
{
    /**
     * 根据合同变更关系
     * @param Owner $owner
     */
    public function changeIsRent(Owner $owner): void
    {
        $owner->load('ownerable');
        $estateModel = $owner->ownerable;

        $estateModel->is_rent = false;  // 把（建筑|楼栋|房间）设置为可以出租
        $estateModel->save();

        // 如果合同关联一个房间
        if (isset($estateModel->building_id)) {
            // 然后搜索所有的房间， 如果所有房间都没有出租，如果是：把楼栋设置的is_rent = false
            $bool = Room::query()->where('building_id', $owner->ownerable->building_id)
                ->where("is_rent", true)
                ->exists();

            // true： 有房间被出租， false: 没有房间被出租
            if (!$bool) {
                $buildingModle = $estateModel->building;
                $buildingModle->is_rent = false;
                $buildingModle->save();
                // 然后搜索所有的楼栋， 判断是否所有都没有出租，如果是：把房产设置的is_rent = false
                $bool = Building::query()->where('house_id', $buildingModle->house_id)
                    ->where("is_rent", true)
                    ->exists();
                // true： 有楼栋被出租， false: 没有楼栋被出租
                if (!$bool) {
                    $houseModle = $buildingModle->house;
                    $houseModle->is_rent = false;
                    $houseModle->save();
                }
            }
        }

        // 如果合同关联一个楼栋
        if (isset($estateModel->house_id)) {
            // 搜索所有的房间， 如果所有房间都没有出租，如果是：把楼栋设置的is_rent = false
            $bool = Room::query()->where('house_id', $estateModel->house_id)
                ->where("is_rent", true)
                ->exists();
            // true： 有楼栋被出租， false: 没有楼栋被出租
            if (!$bool) {
                $houseModle = $estateModel->house;
                $houseModle->is_rent = false;
                $houseModle->save();
            }
        }
    }
}